package com.yuncheng.spcyApi.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuncheng.common.base.service.BaseService;
import com.yuncheng.spcyApi.entity.SpcyJcyFybxdgrjl;
import com.yuncheng.spcyApi.entity.SpcyQyJbxx;
import com.yuncheng.spcyApi.entity.SpcySqsxHydjry;
import com.yuncheng.entity.YcSysUser;
import com.yuncheng.vo.GetKsKz;
import com.yuncheng.spcyApi.vo.common.PageVo;

import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.List;

public interface IYcSysUserService extends BaseService<YcSysUser> {
     YcSysUser getYcSysUserById(String userId);

     /**
      * 获取科室-对应岗位的人员
      * @param deptName 部门
      * @param zw 岗位
      * @return
      */
     List<GetKsKz> getKsKzObject(String deptName, String zw);

     // 通过部门id-查询对应的用户列表
     List<YcSysUser> getUserListByDeptId(String deptId);

     // 验证账号不同
     void verifyUserInAccount(String oldAccount,String newAccount);

     // 验证手机号不同
     void verifyUserInPhone(String oldPhone,String newPhone);

     // 验证身份证号
     void verifyUserInSfzh(String oldFsfzh,String newFSfzh);

     // 手机号获取用户
     List<YcSysUser> selectUserByPhone(String phone);

     // 身份证获取用户
     List<YcSysUser> selectUserBySfzh(String sfzh);

     // 账号获取用户
     List<YcSysUser> selectUserByAccount(String account);

     // 更新用户
     void updateSysUser(HashMap<String, String> buffer) throws InvocationTargetException, IllegalAccessException;

     // 生成检查员账号相关信息
     YcSysUser genJcyUserAccount(YcSysUser user, String userId, String newAccount);

     // 取消检查员账号相关信息
     YcSysUser cancelGenJcyUserAccount(YcSysUser user);

     /**
      * 生成系统默认账号
      * @param account 当前账号
      * @param fsfzh 身份证号
      * @return
      */
     String getUuidAccount(String account, String fsfzh);

     // 生成检查员用户部门关系
     void genJcyUserDeptGx(String userId);

     // 生成检查员用户角色关系
     void genJcyUserRoleGx(String userId);

     // 生成检查员用户岗位关系
     void genJcyUserJobGx(String userId);

     // 删除检查员用户部门关系
     void deleteJcyUserDeptGx(String userId);

     // 删除检查员用户角色关系
     void deleteJcyUserRoleGx(String userId);

     // 删除检查员用户岗位关系
     void deleteJcyUserJobGx(String userId);

     // 获取聘任登记-手动添加人员-分页查询
     Page<YcSysUser> getPrSdtjryPageList(YcSysUser query,String gjz, PageVo pageVo);

     // 获取解聘登记-手动添加人员-分页查询
     Page<YcSysUser> getJpSdtjryPageList(YcSysUser query,String gjz, PageVo pageVo);

     // 查询可选择报销费用人员列表
     Page<YcSysUser> getFybxdUserPageList(YcSysUser query,String gjz, PageVo pageVo);

     // 更新用户工作状态-在岗
     void updateUserGzztInZg(String userId);

     // 更新用户工作状态-在岗
     void updateUserGzztInZg(List<String> idsList);

     // 更新用户工作状态-解聘
     void updateUserGzztInJp(String userId);

     // 更新用户工作状态-执行任务中
     void updateUserGzztInZxrw(String userId);

     /**
      * 获取用户主部门id
      * @param userid
      * @return
      */
     String getUserZbmByUserId(String userid);

     /** 查询用户银行卡/手机号/邮箱 */
     YcSysUser getUserYhkInfo(String userid);

     /** 查询用户基本信息 */
     YcSysUser getUserJbxxById(String userid);

     /**
      * 验证当前用户是否为指定岗位人员
      */
     String verifyUserIsZdgwry(String userid, String jobName);

     /**
      * 获取当前部门下的所有人员列表
      * @param sysorgid 部门id
      */
     List<YcSysUser> getDeptIndexUserList(String sysorgid);

     /**
      * 查询用户列表-根据ids
      * @param ids
      * @return
      */
     List<YcSysUser> findUserJbxxList(String ids);

     /**
      * 查询用户列表-根据ids
      * @param ids
      * @return
      */
     List<YcSysUser> findUserJbxxListByIds(List<String> ids);

     /**
      * 查询用户姓名列表-根据ids
      * @param ids
      * @return
      */
     List<YcSysUser> findRealnameListByIds(List<String> ids);

     /**
      * 根据用户id-查询用户工作状态
      */
     String findFgzztById(String id);

     /**
      * 验证-当前用户是否为在岗状态
      */
     boolean verifyUserFgzztIsZg(String userid);

     /**
      * 验证-当前用户是否为解聘状态
      */
     boolean verifyUserFgzztIsJp(String userid);

     /**
      *  根据用户id-查询电话
      */
     String findPhoneById(String id);

     /**
      * 新增企业账号用户信息及关系
      * @param userId 新增用户id
      * @param username 新账号
      * @param realname 用户名
      */
     void addQyAccountUser(String userId, String username, String realname, SpcyQyJbxx qy);

     /**
      * 更新用户-银行卡及公务卡信息
      * 根据报销人员进行同步修改
      */
     void updateSysYhkOrGwk(SpcyJcyFybxdgrjl oldBean, SpcyJcyFybxdgrjl bxdryBean);

     /**
      * 更新用户-银行卡及公务卡信息
      * 根据报销人员进行同步修改
      */
     void updateSysYhkOrGwkByHydjry(SpcySqsxHydjry oldBean, SpcySqsxHydjry bxdryBean);

     /**
      *  根据用户id-查询姓名
      */
     String findRealnameById(String id);

     /**
      * 通过用户id-查询企业id
      */
     String selectFqyidById(String id);
}
